<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>haproxy 基础配置文件详解 | 失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		<article>
	
		<h1>haproxy 基础配置文件详解</h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/haproxy/">haproxy</a>
			</span>
		
	</div>

	

	
		<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/haproxy%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%A6%E8%A7%A3/01.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>HAproxy可以实现基于TCP（四层 例如:SSH,SMTP,MYSQL）和HTTP（七层 例如:web服务器）应用的代理软件，同时也可以作为负载均衡器使用，并且是开源完全免费的。HAproxy完全可以支持数以万计的并发链接，它的工作模式可以将其简单而安全地整合到当前的服务架构中，同时可以保护你的WEB服务器不暴露到网络上（设置成代理来实现的 通过VIP将后端的web服务器隐藏到内网中）。</strong></p>
<h2 id="HAProxy有以下几个优点"><a href="#HAProxy有以下几个优点" class="headerlink" title="HAProxy有以下几个优点"></a>HAProxy有以下几个优点</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;1、免费开源，稳定性也非常好，其稳定性可以与硬件级别的F5 BIG-IP相媲美。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2、负载带宽非常大。根据官方文档可知，HAproxy可以跑满10Gbps的带宽，对于软件级负载均衡器来说，是相当惊人的。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3、支持链接拒绝。因为保护一个链接保持打开状态的开销是很低的，有时我们需要防止蠕虫攻击，也就是通过限制它们的连接打开来防止它们的危害，可以用于防止DDoS攻击，这也是其他负载均衡器所不具备的。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;4、支持全透明代理（已具备硬件防火墙的典型特点）。可以用客户端IP地址或任何其他地址来链接后端服务器，这个特性仅在Linux 2.4/2.6 内核打了cttproxy补丁后才可以使用。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;5、支持TCP层（四层）的负载均衡。HAproxy现在多用于线上的MySQL集群环境，常用它作为MySQL（读）负载均衡，不过在后端的MySQL Slaves数量超过10台时性能不如LVS，所以更推荐推荐LVS+Keepalived。<strong>一般情况下都是前端通过LVS做四层负载 HAProxy做后端web服务器的负载 这样性能会比单独用HAProxy高很多</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;6、强大的监控服务。自带强大的监控服务器状态的页面，在生产环境中可结合Nagios来实现邮件或短信报警。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;7、能支持多种的负载均衡算法，现在为止可以支持8种</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;8、支持虚拟主机。</p>
<h2 id="haproxy-的配置文件（haproxy-conf）详解"><a href="#haproxy-的配置文件（haproxy-conf）详解" class="headerlink" title="haproxy 的配置文件（haproxy.conf）详解"></a>haproxy 的配置文件（haproxy.conf）详解</h2><h3 id="1-global"><a href="#1-global" class="headerlink" title="1.global"></a>1.global</h3><ul>
<li>local0日志设备，info日志级别，日志界别有：err warning  info  debug  4种。这个配置表示使用127.0.0.1上的rsyslog服务中的local0日志设备</li>
<li>maxconn 20480   最大并发数</li>
<li>daemon  后台模式</li>
<li>nbproc：进程数</li>
<li>user：需要些用户名</li>
<li>gid：需要写数字</li>
<li>pidfile：pid文件、</li>
</ul>
<h3 id="2-defaults"><a href="#2-defaults" class="headerlink" title="2.defaults"></a>2.defaults</h3><ul>
<li>mode：http    tcp模式，http模式和health模式（健康检查已经废弃）</li>
<li>retries：3   设置后端服务器的失败重试次数，如果连接失败的次数超过这里设置的值，haproxy就会对后端服务器标记不可用，也可以在后面进行设置</li>
<li>timeout connect 10s 设置成功连接到一台服务器的最长等待时间，默认单位是毫秒，也可以使用其他单位换算</li>
<li>timeout client 20s   设置成功连接客户端发动数据时最长等待时间，………………</li>
<li>imeout server 30s     设置服务器端回应客户端数据发送的最长等待时间…………</li>
<li>timeout check 5s      设置对后端服务器的检测超时时间，…………</li>
</ul>
<h3 id="3-frontend"><a href="#3-frontend" class="headerlink" title="3.frontend"></a>3.frontend</h3><ul>
<li>frontend关键字定义了一个名字为www的前端虚拟节点</li>
<li>bind格式：bind [<address>:<port>]  interface <interface>    interface可选项，用来指定网络接口的名称，只在linux上使用</interface></port></address></li>
<li>option httplog        默认情况下，haproxy日志是不记录http请求的，这样不方便haproxy的排错和监控，此项启动日志记录http请求</li>
<li>option forwardfor     后端服务器需要获得客户端的真实ip，就需要配置此参数</li>
<li>option httpclose:           此项表示客户端和服务器端完成一次连接请求后，haproxy将主动关闭tcp连接。这是对性能非常有帮助的参数</li>
<li>log global：     表示使用全局的日志配置，</li>
<li>default_backend：    指定默认的后端服务器池，也就是指一组后端真是服务器，而真是服务器组将在backend段定义。这里的htmpool就是一个后端服务器组。</li>
</ul>
<h3 id="4-backend"><a href="#4-backend" class="headerlink" title="4.backend"></a>4.backend</h3><ul>
<li>backend关键字定义了一个名为htmpool的后端真是服务器组。</li>
<li>mode  http   http模式</li>
<li>option  redispatch：此参数用于cookie保持的环境中。在默认的环境下，HAProxy会将其请求的后端服务器的serverID插入到cookie中，以保证会话的session持久性。而如果后端的服务器出现故障，客户端的cookie是不会刷新的，这就会出现问题。此时如果设置此参数，将会将客户端的请求强制定向到另外一台监控的后端服务器上，一保证服务器的正常。</li>
<li>option abortonclose：如果设置此参数，在服务器负载很高的情况下，自动结束当前队列处理时间比较长的连接</li>
<li>balance：此关键字用来定义负载均衡算法：常用的算法有：<ul>
<li>1.roundrobin：基于权重轮训    </li>
<li>2.static-rr：静态权重轮训，运行时调整其服务器权重不会生效</li>
<li>3.source：ip算法，ip_hash，同一个客户端的请求转发在特定的后端服务器上</li>
<li>4.leastconn：此算法会将新的连接请求转发到最少连接数目的后端服务器，在回话时间较长的环境中使用，比如：数据库负载均衡等，不适合会话短的环境</li>
<li>5.uri：此算法会对部分或者整个URL进行hash运算，在经过与服务器的总权重相除，最后转发到某台匹配的后端服务器上</li>
<li>6.uri_param：此算法会根据URL路劲中的参数进行转发，这样可保证在后端真是服务器数量不变时，同一个用户的请求始终分发到一台机器上</li>
<li>7.hdr：此算法根据http头进行转发，如果指定的http头名称不存在，则使用roundrobin算法进行策略转发。</li>
</ul>
</li>
<li>cookie：表示允许向cookie插入SERVERID，每台服务器的SERVERID可在下面的server关键字中使用cookie关键字定义</li>
<li>option httpchk：此选项表示启用http的服务状态监测功能。haproxy作为一个专业的负载均衡器，他支持对backend部分指定的后端服务器节点的健康检查，以保证在后端backend中某个节点不能服务时，吧从frotend段进来的客户端请求分配至backend中其他健康节点上，从而保证整理服务的可用性。option httpchk具体用法如下：</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">option httpchk &lt;mothod&gt; &lt;uri&gt; &lt;version&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;method:常用的请求的方法：OPTIONS, GET,HEAD，一般用head方式，head仅检查response的head是不是状态码200，head相对get更快，更简单<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;uri：表示要检测的url地址，200为正常，其他都为错误<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;version：指定心跳检测时的http版本号    </p>
<ul>
<li>server：定义后端真实服务器，不能用于default和frontend部分，使用格式：</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">server	&lt;name&gt;		&lt;address&gt;[:port]  [param*]</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;参数含义：</p>
<ul>
<li><p><name>：后端服务器指定一个内部名称，随便写</name></p>
</li>
<li><p>[param*]：常用参数：</p>
</li>
<li><p>check：表示启用对此后端服务器执行健康检查</p>
</li>
<li><p>inter：设置健康状态检查的时间间隔，单位毫秒</p>
</li>
<li><p>rise：社会中重故障状态转换正常状态的次数</p>
</li>
<li><p>fall：设置后端服务器从正常状态转换至不可用状态的检查次数：</p>
</li>
<li><p>cookie：指定后端服务器设定的cookie值。</p>
</li>
<li><p>weight：权重，值1-256，0代表不参与负载均衡</p>
</li>
<li><p>backup：设置后端服务器的备份服务器，仅仅在后端所有真是服务器均不可用的情况下次啊启用</p>
</li>
</ul>
<h3 id="5-listen"><a href="#5-listen" class="headerlink" title="5.listen"></a>5.listen</h3><ul>
<li>listen关键字定义了一个admin_stats的实例，</li>
<li>stats refresh：设置haproxy监控统计页面自动刷新的时间。</li>
<li>stats uri：设置haproxy监控统计页面的URL路劲，通过ip：port/haproxy-status查看，路劲自己随意设置</li>
<li>stats realm：设置登录haproxy统计页面的密码框上的文本信息</li>
<li>stats auth：设置登录haproxy统计页面的用户名和密码。可以设置多个，设置多行</li>
<li>stats hide-version：用来隐藏统计页面上haproxy的版本信息</li>
<li>stats admin if TURE：在1.4.9版本以后，可以在监控页面上手工启动或者禁用后端服务器</li>
</ul>

	

	
		<span class="different-posts"><a href="/2017/10/12/Haproxy/5. haproxy 基础配置文件详解/" onclick="window.history.go(-1); return false;">⬅️ Go back </a></span>

	

</article>

	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
